package com.dnndo.quartz.task;


import com.dnndo.system.service.IOpusService;
import com.dnndo.system.service.ThemeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * 主题活动相关的定时任务
 *
 * @author Gemini
 */
@Component("themeTask")
public class ThemeTask {

    @Autowired
    private ThemeService themeService;

    @Autowired
    private IOpusService opusService;

    /**
     * 计算并排名到期主题的作品
     * 这是一个定时任务方法，会定期检查并处理所有已结束但尚未计算排名的比赛主题。
     */
    public void calculateRanking() {
        // 1. 查询所有已结束且排名状态为0（未计算）的主题ID
        List<Integer> themeIds = themeService.selectExpiredAndUnrankedThemes();

        // 2. 遍历这些主题ID，逐个进行计分和排名
        for (Integer themeId : themeIds) {
            try {
                // 调用核心业务逻辑：根据主题ID计算并排名作品
                opusService.calculateAndRankOpusByThemeId(themeId);

                // 3. 更新主题的排名状态为1（已计算），防止重复处理
                themeService.updateThemeRanked(themeId);
            } catch (Exception e) {
                // 如果某个主题处理失败，记录日志，然后继续处理下一个
                System.err.println("Failed to calculate and rank for themeId: " + themeId);
                e.printStackTrace();
            }
        }
    }
} 